<!DOCTYPE html>
<html lang="en" class="no-js">
  <script src="https://cdn.jsdelivr.net/npm/clipboard@1/dist/clipboard.min.js"></script>
  <head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
  <meta name="generator" content="Hugo 0.55.6" />

  <meta name="ROBOTS" content="INDEX, FOLLOW" />

  <link rel="alternate" type="application/rss&#43;xml" href="/v0.6/v0.6/index.xml" />

  <link rel="shortcut icon" href="/v0.6/assets/favicons/favicon.ico" />
  <link rel="apple-touch-icon" href="/v0.6/assets/favicons/apple-touch-icon.png" sizes="180x180" />
  <link rel="icon" type="image/png" href="/v0.6/assets/favicons/favicon-16x16.png" sizes="16x16" />
  <link rel="icon" type="image/png" href="/v0.6/assets/favicons/favicon-32x32.png" sizes="32x32" />
  <link rel="icon" type="image/png" href="/v0.6/assets/favicons/android-144x144.png" sizes="36x36" />
  <link rel="icon" type="image/png" href="/v0.6/assets/favicons/android-144x144.png" sizes="48x48" />
  <link rel="icon" type="image/png" href="/v0.6/assets/favicons/android-144x144.png" sizes="72x72" />
  <link rel="icon" type="image/png" href="/v0.6/assets/favicons/android-144x144.png" sizes="96x196" />
  <link rel="icon" type="image/png" href="/v0.6/assets/favicons/android-144x144.png" sizes="144x144" />
  <link rel="icon" type="image/png" href="/v0.6/assets/favicons/android-192x192.png" sizes="192x192" />

  <title>Build & Release (CI) | Meshery</title>
  <meta property="og:title" content="Build & Release (CI)" />
  <meta property="og:description"
    content="Details of Meshery's build and release strategy." />
  <meta property="og:type" content="website" />
  <meta property="og:url" content="https://docs.meshery.io" />
  <meta property="og:site_name" content="https://docs.meshery.io" />
  <meta property="og:image"
    content="https://raw.githubusercontent.com/meshery/meshery/master/docs/assets/img/meshery-cncf-twitter.png" />

  <meta itemprop="name" content="Build & Release (CI)" />
  <meta itemprop="description"
    content="Details of Meshery's build and release strategy." />

  <meta name="twitter:card" content="summary" />
  <meta name="twitter:title" content="Build & Release (CI)" />
  <meta name="twitter:description"
    content="Details of Meshery's build and release strategy." />
  <meta name="twitter:image"
    content="https://raw.githubusercontent.com/meshery/meshery/master/docs/assets/img/meshery-cncf-twitter.png" />
  <!-- <link rel="stylesheet" href="/v0.6/assets/css/palette.css" /> -->
  <!-- <link rel="stylesheet" href="/v0.6/assets/css/anchorjs.css" /> -->
  <link rel="stylesheet" href="/v0.6/assets/css/sass.css" />
  <link rel="stylesheet" href="/v0.6/v0.6https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/all.css" />

  <script src="https://code.jquery.com/jquery-3.3.1.min.js"
    integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.tablesorter/2.31.3/js/jquery.tablesorter.min.js"
    integrity="sha512-qzgd5cYSZcosqpzpn7zF2ZId8f/8CHmFKZ8j7mU4OUXTNRd5g+ZHBPsgKEwoqxCtdQvExE5LprwwPAgoicguNg=="
    crossorigin="anonymous" referrerpolicy="no-referrer"></script>
  <!-- Anchorjs included for adding hover anchor links to headings -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/anchor-js/4.2.2/anchor.min.js"></script>
  <script>
    $(function () {
      /** AnchorJS options and selector */
      anchors.options = {
        visible: "hover",
        placement: "right",
      };
      anchors.add("h1, h2, h3, h4, h5");
    });
    // Function to handle anchor links
    document.addEventListener('click', function (event) {
      if (event.target.tagName === 'A' && event.target.getAttribute('href').startsWith('#')) {
        window.location.hash = event.target.getAttribute('href');
      }
    });
  </script>
</head>
<style></style> <header>
  <nav class="js-navbar-scroll navbar">
    <a class="navbar-brand" href="/v0.6/v0.6/">
      <div class="navbar-logo">
        <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 379.08 80.17"><defs><style>.cls-1{fill:#00d3a9;}.cls-2{fill:#00b39f;}.cls-3 {fill:var(--meshery-logo-text-fill);}</style></defs><polygon class="cls-1" points="41.26 18.9 41.26 38.04 57.86 28.43 41.26 18.9"/><polygon class="cls-1" points="41.26 42.05 41.26 61.29 58.01 51.71 41.26 42.05"/><polygon class="cls-2" points="38.87 37.91 38.87 19.06 22.48 28.45 38.87 37.91"/><path class="cls-2" d="M6,61.22A40.35,40.35,0,0,0,18.71,74V53.86Z"/><polygon class="cls-2" points="38.87 61.2 38.87 42.19 22.44 51.7 38.87 61.2"/><polygon class="cls-1" points="21.1 72.81 37.74 63.3 21.1 53.68 21.1 72.81"/><polygon class="cls-2" points="59.15 72.92 59.15 53.81 42.53 63.31 59.15 72.92"/><path class="cls-2" d="M75.42,59a39.88,39.88,0,0,0,4.71-17.18l-17.32,9.9Z"/><polygon class="cls-1" points="61.54 49.7 78.23 40.15 61.54 30.55 61.54 49.7"/><polygon class="cls-2" points="59.15 26.42 59.15 7.43 42.61 16.91 59.15 26.42"/><polygon class="cls-2" points="59.15 49.61 59.15 30.45 42.57 40.05 59.15 49.61"/><polygon class="cls-2" points="40.07 80.17 40.07 80.17 40.07 80.17 40.07 80.17"/><polygon class="cls-1" points="21.1 30.41 21.1 49.72 37.8 40.05 21.1 30.41"/><path class="cls-2" d="M38.87,0A40,40,0,0,0,21.28,4.65L38.87,14.77Z"/><polygon class="cls-1" points="21.1 7.31 21.1 26.49 37.81 16.91 21.1 7.31"/><path class="cls-2" d="M18.71,6.14A40.28,40.28,0,0,0,6,18.94l12.72,7.34Z"/><path class="cls-1" d="M59,4.74A40,40,0,0,0,41.26,0V14.93Z"/><path class="cls-1" d="M0,41.48A40,40,0,0,0,4.79,59.16L17.67,51.7Z"/><path class="cls-1" d="M4.79,21A40,40,0,0,0,0,38.58L17.69,28.45Z"/><path class="cls-2" d="M21.24,75.49a39.88,39.88,0,0,0,17.63,4.66V65.41Z"/><path class="cls-1" d="M74.17,19A40.24,40.24,0,0,0,61.54,6.21v20.1Z"/><path class="cls-1" d="M61.54,74A40.34,40.34,0,0,0,74.23,61.07L61.54,53.75Z"/><path class="cls-2" d="M80.13,38.48a39.88,39.88,0,0,0-4.76-17.42L62.64,28.43Z"/><path class="cls-1" d="M41.26,80.15a39.79,39.79,0,0,0,17.59-4.64L41.26,65.34Z"/><polygon class="cls-2" points="18.71 49.54 18.71 30.61 2.27 40.04 18.71 49.54"/><polygon class="cls-3" points="269.94 29.39 269.94 30.89 269.94 37.93 269.94 46.53 269.94 59.08 303.36 59.08 303.36 52.03 276.99 52.03 276.99 46.53 276.99 44.98 297.25 44.98 297.25 37.93 276.99 37.93 276.99 30.89 303.36 30.89 303.36 23.84 269.94 23.84 269.94 29.39"/><polygon class="cls-3" points="141.41 29.39 141.41 30.89 141.41 37.93 141.41 46.53 141.41 59.08 174.83 59.08 174.83 52.03 148.46 52.03 148.46 46.53 148.46 44.98 168.72 44.98 168.72 37.93 148.46 37.93 148.46 30.89 174.83 30.89 174.83 23.84 141.41 23.84 141.41 29.39"/><path class="cls-3" d="M221.08,49.87a8.74,8.74,0,0,1-.73,3.57,9,9,0,0,1-2,2.94,9.5,9.5,0,0,1-2.93,2,9,9,0,0,1-3.6.73h-33V51.66h33a1.78,1.78,0,0,0,1.79-1.79V47a1.76,1.76,0,0,0-.52-1.27,1.73,1.73,0,0,0-1.27-.51H188.09a8.74,8.74,0,0,1-3.57-.73,9.4,9.4,0,0,1-5-5,8.9,8.9,0,0,1-.73-3.57V33.09a9.11,9.11,0,0,1,.73-3.59,9.58,9.58,0,0,1,2-2.94,9.32,9.32,0,0,1,3-2,8.9,8.9,0,0,1,3.57-.72h33v7.47h-33a1.78,1.78,0,0,0-1.79,1.78V36a1.78,1.78,0,0,0,1.79,1.79h23.73a9.11,9.11,0,0,1,3.6.72,9.59,9.59,0,0,1,2.93,2,9.41,9.41,0,0,1,2,2.94,8.9,8.9,0,0,1,.73,3.59Z"/><path class="cls-3" d="M265.54,59.08h-6.73V45.22H232.6V59.08h-6.72V37.75h32.93V23.84h6.73ZM232.6,34.44h-6.72V23.84h6.72Z"/><polygon class="cls-3" points="361.45 36.17 352.64 23.84 343.83 23.84 357.93 44.98 357.93 59.08 364.98 59.08 364.98 44.98 379.08 23.84 370.38 23.84 361.45 36.17"/><path class="cls-3" d="M315.35,30.56h18.07v7.33H318.86v6.72h3.34L335,59.08h8.7L330.9,44.61h5a5.48,5.48,0,0,0,5.48-5.48V29.31a5.47,5.47,0,0,0-5.48-5.47H308.44V59.08h7.05Z"/><path class="cls-3" d="M136,59.08h-7.47V33.38a1.94,1.94,0,0,0-.16-.8,2.15,2.15,0,0,0-1.11-1.11,1.94,1.94,0,0,0-.8-.16H91.91V23.84h34.54a9.22,9.22,0,0,1,3.69.75,9.38,9.38,0,0,1,5.1,5.1,9.22,9.22,0,0,1,.75,3.69Zm-36.6,0H91.91V31.31l7.48-2Zm18.28,0h-7.48V35.22h7.48Z"/></svg>
        <span
          class="font-weight-bold small-hide"
          style="
            font-size: 2rem;
            vertical-align: bottom;
            color: var(--meshery-logo-text-fill);
            font-family: 'Open Sans';
          "
          >Documentation</span
        >
      </div>
    </a>

    <div id="main_navbar">
      <ul class="navbar-nav">
        <!-- 
			<li class="nav-item">
        <a class="nav-link" href="/v0.6/v0.6https://github.com/meshery/meshery" target="_blank"><span>GitHub</span></a>
      </li>  -->

        <!-- Internal links -->
        
        <li class="nav-item">
          <a
            class="nav-link"
            href="/v0.6/v0.6/installation/quick-start"
            ><span>Quick Start</span></a
          >
        </li>
        
        <li class="nav-item">
          <a
            class="nav-link"
            href="/v0.6/v0.6https://meshery.io"
            ><span>Site</span></a
          >
        </li>
        
        <li class="nav-item">
          <a
            class="nav-link"
            href="/v0.6/v0.6http://discuss.meshery.io/"
            ><span>Discuss</span></a
          >
        </li>
        
        
        <a href="/v0.6/v0.6https://play.meshery.io">
          <div class="nav-btn">Playground</div>
        </a>
        <!--Version Selector -->
        <select
          onchange="window.location=this.value"
          class="appearance-none flex-1 w-full px-0 py-1 placeholder-gray-900 tracking-wide focus:outline-none version-selector"
          name="versioningSelection"
          id="versioningSelection"
        >
       </select>

          <!-- <option value="">Versions</option> -->
          <option  
           value="/"
           class="nav-item mr-4 mb-2 mb-lg-0 text-black">
           <span>latest</span>
         </option>
         <option  
          value="/v0.6"
          class="nav-item mr-4 mb-2 mb-lg-0 text-black">
         <span>v0.6</span>
       </option>
         <!-- we get the version selected, and put it to the right option  -->
         <option  
           value="/v0.5"
           class="nav-item mr-4 mb-2 mb-lg-0 text-black">
           <span>v0.5</span>
         </option>
         <!-- we get the version selected, and put it to the right option  --><option
           
           value="/v0.4"
           class="nav-item mr-4 mb-2 mb-lg-0 text-black"
         >
           <span>v0.4</span>
         </option>
         
       </select>
      </ul>
    </div>

    <div class="icon-container">
      <button class="nav-toggle-btn nav-toggle-btn--main">
        <svg
          id="menu-nav-toggle-btn"
          xmlns="http://www.w3.org/2000/svg"
          viewBox="0 0 24 24"
          fill="none"
          stroke="currentColor"
          stroke-width="2"
          stroke-linecap="round"
          stroke-linejoin="round"
          class="feather feather-menu"
        >
          <line x1="3" y1="12" x2="21" y2="12"></line>
          <line x1="3" y1="6" x2="21" y2="6"></line>
          <line x1="3" y1="18" x2="21" y2="18"></line>
        </svg>
      </button>
      <button class="nav-mode-icon" id="mode-toggle-btn" style="text-align: center">
        <img class="nav-text" id="logo-dark-light" src="/assets/img/nav-icons/mode-toggle-icon-moon.png" 
        data-logo-for-dark="/assets/img/nav-icons/mode-toggle-icon-moon.png"
        data-logo-for-light="/assets/img/nav-icons/mode-toggle-icon-sun.png"
        />
      </button>
    </div>

    <!--Search Bar
    <div class="navbar-nav d-none d-lg-block"><input type="search" class="form-control td-search-input" placeholder="&#xf002 Search this site…" aria-label="Search this site…" autocomplete="off"></div>-->

    <!-- meshery-custom-begin
	<div class="navbar-nav d-none d-lg-block">
          <a class="gh-source" data-gh-source="github" href="/v0.6/v0.6https://github.com/meshery/meshery" title="Go to repository" data-md-state="done">
          <div class="gh-source__repository">
            <i class="fab fa fa-github fa-2x" style='padding-right:20px; float:left; margin-top:5px'></i>
            meshery/meshery
          <ul class="gh-source__facts"><li class="gh-source__fact" id='stars'></li><li id="forks" class="gh-source__fact"></li></ul></div></a>
        </div>
      </div>
meshery-custom-end -->
  </nav>
</header>

<!-- meshery-custom-begin
<script>
$(document).ready(function() {
  var url = "https://api.github.com/search/repositories?q=meshery/meshery";
  fetch(url, { 
      headers: {"Accept":"application/vnd.github.preview"}
  }).then(function(e) {
    return e.json()
  }).then(function(r) {
     console.log(r.items[0])
     stars = r.items[0]['stargazers_count']
     forks = r.items[0]['forks_count']
     $('#stars').text(stars + " Stars")
     $('#forks').text(forks + " Forks")
  });
});
</script>
meshery-custom-end -->


  <body class="td-section dark-mode">
    <script>
      if(localStorage.getItem("mode") == "light-mode")  {
      document.body.classList.remove("dark-mode");
      const allLogos = document.querySelectorAll("#logo-dark-light");
      allLogos.forEach(e => e.src = e.dataset.logoForLight);
  }
    </script>
    <div class="flex-container">
      <div class="left-container">
        <div class="sidebar-container-wrapper">
          <div class="sidebar-container"><div class="sidebar-menu">
  <form class="sidebar__search-form">
    <input
      type="search"
      class="sidebar__search-input"
      id="sidebar-search-input"
      placeholder="Search this site..."
      aria-label="Search this site..."
      autocomplete="off"
    />
  </form>

  <script type="text/javascript">
    <!--Ref: https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView-->
    <!--Ref: https://stackoverflow.com/questions/11039885/scrollintoview-causing-the-whole-page-to-move-->
    (() => {
      window.addEventListener("load", function () {
        let scrollElem = document.getElementsByClassName("sidebar-nav__section-link active").item(0);
        scrollElem.scrollIntoView({ behavior: "smooth", block: "nearest", inline: "start" });
      });
    })();
  </script>

  <nav class="sidebar-nav" id="td-section-nav">
    
    <ul class="sidebar-nav__section">
       
      <li class="sidebar-nav__section-title ">
        <a
          href="/v0.6/v0.6/installation/quick-start"
          class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
          >🚀 Quick Start
        </a>
      </li>
      
      <ul>
        <li id="quick-start">
          <ul class="td-sidebar-nav__section">
             
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/installation"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Supported Platforms ↆ</a
              >
            </li>
              
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/installation/compatibility-matrix"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Compatibility Matrix</a
              >
            </li>
             
          </ul>
        </li>
      </ul>

      

    </ul>
    
    <ul class="sidebar-nav__section">
       
      <li class="sidebar-nav__section-title ">
        <a
          href="/v0.6/v0.6/project/overview"
          class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
          >🗺 Overview
        </a>
      </li>
      
      <ul>
        <li id="overview">
          <ul class="td-sidebar-nav__section">
             
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/project/faq"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >FAQ</a
              >
            </li>
             
          </ul>
        </li>
      </ul>

      

    </ul>
    
    <ul class="sidebar-nav__section">
       
      <li class="sidebar-nav__section-title ">
        <a
          href="/v0.6/v0.6/project"
          class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
          >🧑‍💻 Contributing & Community
        </a>
      </li>
      
      <ul>
        <li id="contributing-community">
          <ul class="td-sidebar-nav__section">
             
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/project/community"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Community</a
              >
            </li>
              
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/project/contributing"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Contributing ↆ</a
              >
            </li>
             
             <ul>
                <li id="">
                     
                  <a
                    class="sidebar-nav__section-link  active "
                    id="m-contributing-community-contributing-ↆ-build-release-ci"
                    href="/v0.6/v0.6/project/contributing/build-and-release"
                    >Build & Release (CI)</a>
                </li>
                  
                  <ul>
                         
                      <li id="end-to-end-testing">
                        <a
                        class="sidebar-nav__section-link "
                        id="m-contributing-community-contributing-ↆ-end-to-end-testing"
                        href="/v0.6/v0.6/project/contributing/contributing-cypress"
                        >End-to-End Testing</a
                      >
                    </li>
                      
                  </ul>
                   

                   
                  <a
                    class="sidebar-nav__section-link "
                    id="m-contributing-community-contributing-ↆ-meshery-adapters"
                    href="/v0.6/v0.6/project/contributing/contributing-adapters"
                    >Meshery Adapters</a>
                </li>
                   

                   
                  <a
                    class="sidebar-nav__section-link "
                    id="m-contributing-community-contributing-ↆ-meshery-cli"
                    href="/v0.6/v0.6/project/contributing/contributing-cli"
                    >Meshery CLI</a>
                </li>
                  
                  <ul>
                         
                      <li id="cli-design-principles">
                        <a
                        class="sidebar-nav__section-link "
                        id="m-contributing-community-contributing-ↆ-cli-design-principles"
                        href="/v0.6/v0.6/project/contributing/contributing-cli-guide"
                        >CLI Design Principles</a
                      >
                    </li>
                      
                  </ul>
                   

                   
                  <a
                    class="sidebar-nav__section-link "
                    id="m-contributing-community-contributing-ↆ-meshery-docs"
                    href="/v0.6/v0.6/project/contributing/contributing-docs"
                    >Meshery Docs</a>
                </li>
                   

                   
                  <a
                    class="sidebar-nav__section-link "
                    id="m-contributing-community-contributing-ↆ-meshery-errors"
                    href="/v0.6/v0.6/project/contributing/contributing-error"
                    >Meshery Errors</a>
                </li>
                   

                   
                  <a
                    class="sidebar-nav__section-link "
                    id="m-contributing-community-contributing-ↆ-meshery-server"
                    href="/v0.6/v0.6/project/contributing/contributing-server"
                    >Meshery Server</a>
                </li>
                   

                   
                  <a
                    class="sidebar-nav__section-link "
                    id="m-contributing-community-contributing-ↆ-meshery-ui"
                    href="/v0.6/v0.6/project/contributing/contributing-ui"
                    >Meshery UI</a>
                </li>
                   

                   
                  <a
                    class="sidebar-nav__section-link "
                    id="m-contributing-community-contributing-ↆ-meshery-docker-extension"
                    href="/v0.6/v0.6/project/contributing/contributing-docker-extension"
                    >Meshery Docker Extension</a>
                </li>
                   

                   
                  <a
                    class="sidebar-nav__section-link "
                    id="m-contributing-community-contributing-ↆ-meshery-server-events"
                    href="/v0.6/v0.6/project/contributing-server-events"
                    >Meshery Server Events</a>
                </li>
                   

                
                </ul>
               
              </ul>
              
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/project/releases"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Releases</a
              >
            </li>
              
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/project/security-vulnerabilities"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Vulnerabilities</a
              >
            </li>
             
          </ul>
        </li>
      </ul>

      

    </ul>
    
    <ul class="sidebar-nav__section">
       
      <li class="sidebar-nav__section-title ">
        <a
          href="/v0.6/v0.6/concepts"
          class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
          >🧠 Concepts
        </a>
      </li>
      
      <ul>
        <li id="concepts">
          <ul class="td-sidebar-nav__section">
             
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/concepts/architecture"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Architectural ↆ</a
              >
            </li>
              
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/concepts/logical"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Logical ↆ</a
              >
            </li>
             
          </ul>
        </li>
      </ul>

      

    </ul>
    
    <ul class="sidebar-nav__section">
       
      <li class="sidebar-nav__section-title ">
        <a
          href="/v0.6/v0.6/tasks"
          class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
          >⚙️ Tasks (all)
        </a>
      </li>
      
      <ul>
        <li id="tasks-all">
          <ul class="td-sidebar-nav__section">
             
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/tasks/application-management"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Application Management</a
              >
            </li>
              
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/tasks/filter-management"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Filter Management</a
              >
            </li>
              
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/tasks/lifecycle-management"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Lifecycle Management</a
              >
            </li>
              
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/tasks/pattern-management"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Pattern Management</a
              >
            </li>
              
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/tasks/performance-management"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Performance Management</a
              >
            </li>
             
          </ul>
        </li>
      </ul>

      

    </ul>
    
    <ul class="sidebar-nav__section">
       
      <li class="sidebar-nav__section-title ">
        <a
          href="/v0.6/v0.6/guides"
          class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
          >📚 Guides (all)
        </a>
      </li>
      
      <ul>
        <li id="guides-all">
          <ul class="td-sidebar-nav__section">
             
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/guides/meshery-metrics"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Integrating Prometheus and Grafana</a
              >
            </li>
              
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/guides/importing-apps"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Importing Applications</a
              >
            </li>
              
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/guides/pipelining-service-mesh-specifications"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Pipelining service mesh specifications</a
              >
            </li>
              
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/guides/performance-management"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Performance Management with Meshery</a
              >
            </li>
              
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/guides/troubleshooting"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Troubleshooting Guide</a
              >
            </li>
              
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/guides/upgrade"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Upgrading Meshery</a
              >
            </li>
              
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/guides/mesheryctl"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Using mesheryctl ↆ</a
              >
            </li>
              
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/guides/multiple-adapters"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Using Multiple Meshery Adapters</a
              >
            </li>
             
          </ul>
        </li>
      </ul>

      

    </ul>
    
    <ul class="sidebar-nav__section">
       
      <li class="sidebar-nav__section-title ">
        <a
          href="/v0.6/v0.6/extensibility"
          class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
          >🛠 Extensibility
        </a>
      </li>
      
      <ul>
        <li id="extensibility">
          <ul class="td-sidebar-nav__section">
             
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/extensibility/adapters"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Adapters</a
              >
            </li>
              
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/extensibility/load-generators"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Load Generators</a
              >
            </li>
              
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/extensibility/providers"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Providers</a
              >
            </li>
              
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/extensibility/api"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >REST & GraphQL APIs</a
              >
            </li>
              
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/extensibility/ui"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >UI Plugins</a
              >
            </li>
             
          </ul>
        </li>
      </ul>

      

    </ul>
    
    <ul class="sidebar-nav__section">
       
      <li class="sidebar-nav__section-title ">
        <a
          href="/v0.6/v0.6/reference"
          class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
          >📖 Reference
        </a>
      </li>
      
      <ul>
        <li id="reference">
          <ul class="td-sidebar-nav__section">
             
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/reference/mesheryctl"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Meshery CLI</a
              >
            </li>
              
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/reference/error-codes"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >Error Codes</a
              >
            </li>
              
            <li class="sidebar-nav__section-link ">
              <a
                href="/v0.6/v0.6/extensibility/api"
                class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section"
                >REST & GraphQL APIs ↆ</a
              >
            </li>
             
          </ul>
        </li>
      </ul>

      

    </ul>
    
  </nav>
</div>
</div>
        </div>

        <div class="icon-container">
          <button class="nav-toggle-btn nav-toggle-btn--document">
            <?xml version="1.0" encoding="utf-8"?>
              <svg version="1.1" id="document-nav-toggle-btn" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
                x="0px" y="0px" viewBox="0 0 10.7 18.7" style="enable-background:new 0 0 10.7 18.7;" xml:space="preserve">
              <style type="text/css">
                .st0{stroke:#000000;stroke-width:1.5;stroke-miterlimit:10;}
              </style>
              <path class="st0" d="M8.1,9.4L1,1.9C0.7,1.7,0.7,1.2,1,1c0.3-0.3,0.7-0.3,1,0c0,0,0,0,0,0l7.8,7.9c0.3,0.3,0.3,0.7,0,1l-7.8,7.9
                c-0.3,0.3-0.7,0.3-1,0c0,0,0,0,0,0c-0.3-0.3-0.3-0.7,0-1L8.1,9.4z"/>
              </svg>
          </button>
        </div>
      </div>
      <main class="main-container" role="main">
        <nav aria-label="breadcrumb">
          <ol class="breadcrumb spb-1">
            <li class="breadcrumb-item active" aria-current="page"><div id="breadcrumbs">


   <a href="/v0.6/v0.6/">home</a>


  
    / <a href="/v0.6/v0.6/project">project</a> 
  

  
    / <a href="/v0.6/v0.6/project/contributing">contributing</a> 
  

  
    / build & release (ci)
  

</div>

<!-- <a href="/v0.6/v0.6http://idratherbewriting.com" class="noCrossRef productSubtitle"> Home </a> > <a class="noCrossRef productSubtitle" href="/v0.6/v0.6http://localhost:4000">Learn API Doc</a> > ci-build-and-release -->
</li>
          </ol>
        </nav>
        <div class="td-content">
          
          <h1>Build & Release (CI)</h1>
           <p>Meshery’s build and release system incorporates many tools, organized into different workflows each triggered by different events. Meshery’s build and release system does not run on a schedule, but is event-driven. GitHub Actions are used to define Meshery’s CI workflows. New builds of Meshery and its various components are automatically generated upon push, release, and other similar events, typically in relation to their respective master branches.</p>

<h2 id="artifacts">Artifacts</h2>

<p>Today, Meshery and Meshery adapters are released as Docker container images, available on Docker Hub. Meshery adapters are out-of-process adapters (meaning not compiled into the main Meshery binary), and as such, are independent build artifacts and Helm charts. The Docker images are created and tagged with the git commit SHA, then pushed to Docker Hub automatically using GitHub Actions. Subsequently, when contributions containing content for the Helm charts of Meshery and Meshery Adapter are linted and merged, they will be pushed and released to <a href="/v0.6/v0.6https://github.com/meshery/meshery.io">meshery.io</a> Github page by GitHub Action automatically.</p>

<h3 id="artifact-repositories">Artifact Repositories</h3>

<p>Artifacts produced in the build processes are published and persisted in different public repositories and in different formats.</p>

<table>
  <thead>
    <tr>
      <th>Location</th>
      <th>Project</th>
      <th>Repository</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Docker Hub</td>
      <td>Meshery</td>
      <td><a href="/v0.6/v0.6https://hub.docker.com/r/layer5/meshery">https://hub.docker.com/r/layer5/meshery</a></td>
    </tr>
    <tr>
      <td>GitHub</td>
      <td>mesheryctl</td>
      <td><a href="/v0.6/v0.6https://github.com/meshery/meshery/releases">https://github.com/meshery/meshery/releases</a></td>
    </tr>
    <tr>
      <td>Docker Hub</td>
      <td>Meshery Adapter for &lt;service-mesh&gt;</td>
      <td>https://hub.docker.com/r/layer5/meshery-&lt;service-mesh&gt;</td>
    </tr>
    <tr>
      <td>Docs</td>
      <td>Meshery Documentation</td>
      <td><a href="/v0.6/v0.6https://docs.meshery.io">https://docs.meshery.io</a></td>
    </tr>
    <tr>
      <td>GitHub</td>
      <td><a href="/v0.6/v0.6https://smp-spec.io">Service Mesh Performance</a></td>
      <td><a href="/v0.6/v0.6https://github.com/layer5io/service-mesh-performance">https://github.com/layer5io/service-mesh-performance</a></td>
    </tr>
    <tr>
      <td>Github</td>
      <td>Helm charts</td>
      <td><a href="/v0.6/v0.6https://github.com/meshery/meshery.io/tree/master/charts">https://github.com/meshery/meshery.io/tree/master/charts</a></td>
    </tr>
  </tbody>
</table>

<h2 id="secrets">Secrets</h2>

<p>Some portions of the workflow require secrets to accomplish their tasks. These secrets are defined within the respective repositories and accessible to workflows during runtime. Currently defined secrets include:</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">DOCKER_USERNAME</code>: Username of the Docker Hub user with the right privileges to push images</li>
  <li><code class="language-plaintext highlighter-rouge">DOCKER_PASSWORD</code>: Password for the Docker Hub user</li>
  <li><code class="language-plaintext highlighter-rouge">GO_VERSION</code>: As of July 21st 2021 it is 1.16</li>
  <li><code class="language-plaintext highlighter-rouge">IMAGE_NAME</code>: appropriate image name for each of the Docker container images. All are under the <code class="language-plaintext highlighter-rouge">layer5io</code> org.</li>
  <li><code class="language-plaintext highlighter-rouge">SLACK_BOT_TOKEN</code>: Used for notification of new GitHub stars given to the Meshery repo.</li>
  <li><code class="language-plaintext highlighter-rouge">CYPRESS_RECORD_KEY</code>: Used for integration with the Meshery account on Cypress.</li>
  <li><code class="language-plaintext highlighter-rouge">GLOBAL_TOKEN</code>: Used for securely transmitting performance test results for the None Provider.</li>
</ul>

<p>The Docker Hub user, <code class="language-plaintext highlighter-rouge">mesheryci</code>, belongs to the “ciusers” team in Docker Hub and acts as the service account under which these automated builds are being pushed. Every time a new Docker Hub repository is created we have to grant “Admin” (in order to update the README in the Docker Hub repository) permissions to the ciusers team.</p>

<h2 id="checks-and-tests">Checks and Tests</h2>

<p>Meshery’s CI workflow incorporates several checks (partial list below) during merges and/or commits to any branches and pull requests to master branch to prevent broken code from being merged into master.</p>

<p>Collectively, Meshery repositories will generally have CI workflow for commits and pull requests that consist of the following actions:</p>

<ul>
  <li>Lint check (golint)</li>
  <li>Static analysis check (staticcheck)</li>
  <li>Vet (govet)</li>
  <li>Security checks (gosec)</li>
  <li>Unit tests (go tests)</li>
  <li>Build (go build)</li>
  <li>Release binaries through GoReleaser (only for mesheryctl in the Meshery repository)</li>
  <li>Docker build, tag and push</li>
  <li>Helm charts lint (helm)</li>
  <li>Helm charts release, tag and push(stefanprodan/helm-gh-pages@master)</li>
</ul>

<h2 id="tests-for-adapters">Tests for adapters</h2>

<p>All Meshery adapters use a central workflow that is referenced in each of their test workflows which get triggered every time a pull request is made. These
tests in adapters are end-to-end tests and use patternfile. The reusable workflow is present in <code class="language-plaintext highlighter-rouge">.github/workflows</code> in Meshery repository with the workflow name “Test for Meshery adapters using patternfile”</p>

<h3 id="pre-requisite-for-referencing-this-workflow">Pre-requisite for referencing this workflow</h3>

<ol>
  <li>Using actions/upload-artifact@v2 a patternfile has to be uploaded as an artifact with the name as “patternfile”.</li>
  <li>The name of the uploaded patterfile should be passed in</li>
</ol>

<hr />

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  ...
  with:
      patternfile_name: &lt; name of the patternfile which is uploaded &gt;
</code></pre></div></div>

<ol>
  <li>Note: This Job is pre-run to the actual test. This is done in order to create patternfiles dynamically and use them. Therefore name of this jobs has to be passed as</li>
</ol>

<hr />

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  ...
  needs:
     &lt; Name of the pre-requisite job &gt;
</code></pre></div></div>

<ol>
  <li>There should be an infinite token passed in: (Or else local provider will be used)</li>
</ol>

<hr />

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  ...
  secrets:
    token: $
</code></pre></div></div>

<h3 id="functionality-of-central-workflow">Functionality of Central Workflow</h3>

<ol>
  <li>Checks out the code of the repository(on the ref of latest commit of branch which made the PR) in which it is referenced.</li>
  <li>Starts a minikube cluster</li>
  <li>Builds a docker image of the adapter and sets minikube to use docker’s registry.</li>
  <li>Starts the adapter and meshery server (The url to deployment and service yaml of adapter are configurable).
NOTE: The service mesh name( whose adapter we are testing ) has to passed in:</li>
</ol>

<hr />

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  ...
  with:
     adapter_name: &lt; NAME OF THE SERVICE MESH &gt;
</code></pre></div></div>

<ol>
  <li>The uploaded patternfile is deployed.</li>
  <li>Workflow sleeps for some time.</li>
  <li>Then the assertion is made that the pods passed in-</li>
</ol>

<hr />

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  ...
  with:
     expected_pods: &lt; pod1,pod2,pod3 &gt;  #comma separated pod names that will be expected to be present after patternfile is deployed
</code></pre></div></div>

<ol>
  <li>And these pods are present in their respective namespaces passed in-</li>
</ol>

<hr />

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  ...
  with:
     expected_pods_namespaces: &lt; pod1ns, pod2ns , pod3ns &gt;
</code></pre></div></div>

<h3 id="expected-inputs-of-this-workflow">Expected inputs of this workflow</h3>

<hr />

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>inputs:
  expected_pods:
    required: true
    type: string
  expected_pods_namespaces:
    required: true
    type: string
  service_url:
    required: true
    type: string
  deployment_url:
    required: true
    type: string
  adapter_name:
    required: true
    type: string
  patternfile_name:
    required: true
    type: string
  provider:
    required: false
    type: string
secrets:
  token:
</code></pre></div></div>

<h3 id="expected-outputs-of-this-workflow">Expected outputs of this workflow</h3>

<p>The pods passed in “expected_pods” are running in the subsequent namespaces passed in “expected_pods_namespaces”. If not, the workflow fails</p>

<h2 id="automated-builds">Automated Builds</h2>

<p>All Meshery GitHub repositories are configured with GitHub Actions. Everytime a pull request is submitted against the master branch of any repository, that repository’s GitHub Actions will be invoked (whether the PR is merged or not). Workflows defined in Meshery repository will generally (but not always) perform the following actions:</p>

<ol>
  <li>trigger a Docker build to build a Docker container image</li>
  <li>generate two Docker tags:
    <ol>
      <li>a tag containing the git merge SHA</li>
      <li>a tag containing that particular release’s git tag (if one is present)</li>
    </ol>
  </li>
  <li>assign each of these two tags to the new container image as well as the latest tag.</li>
  <li>push the new Docker tags and image to Docker Hub.</li>
</ol>

<h3 id="building-mesheryctl">Building <code class="language-plaintext highlighter-rouge">mesheryctl</code></h3>

<p>As a special case, the meshery repository contains an additional artifact produced during each build. This artifact is mesheryctl which is built as an executable binary. In order to make the job of building mesheryctl easier for a combination of different platform architectures and operating systems, we are using <a href="/v0.6/v0.6https://goreleaser.com">GoReleaser</a>. Irrespective of branch, for every git commit and git push to the meshery repository, GoReleaser will execute and generate the OS and arch-specific binaries ( but will NOT publish them to GitHub). Even though mesheryctl binaries are built each time a pull request is merged to master, only stable channel artifacts are published (persisted).</p>

<h3 id="releasing-mesheryctl-to-github">Releasing <code class="language-plaintext highlighter-rouge">mesheryctl</code> to GitHub</h3>

<p>Only when a git tag containing a semantic version number is present (is a commit in the master branch) will GoReleaser execute, generate the archives, and also publish the archives to <a href="/v0.6/v0.6https://github.com/meshery/meshery/releases">Meshery’s GitHub releases</a> automatically. GoReleaser is configured to generate artifacts for the following OS, ARCH combination:</p>

<ul>
  <li>Darwin - i386, x86_64</li>
  <li>Linux - i386, x86_64</li>
  <li>Windows - i386, x86_64</li>
  <li>FreeBSD - i386, x86_64</li>
</ul>

<p>The artifacts will be made available as a tar.gz archive for all the operating systems. mesheryctl is bundled into packages for commonly used package managers: homebrew and scoop.</p>

<h4 id="homebrew">Homebrew</h4>

<p>GoReleaser facilitates the creation of a brew formula for mesheryctl. The <a href="/v0.6/v0.6https://github.com/layer5io/homebrew-tap">homebrew-tap</a> repository is the location for Meshery’s brew formulas.</p>

<h4 id="scoop">Scoop</h4>

<p>GoReleaser facilitates the creation of a Scoop app for mesheryctl. The <a href="/v0.6/v0.6https://github.com/layer5io/scoop-bucket">scoop-bucket</a> repository is the location of Meshery’s Scoop bucket.</p>

<h2 id="helm-charts-lint-check-build-and-release">Helm Charts Lint Check, Build, and Release</h2>

<p>The charts lint check, charts build, and charts release workflows are all triggered by GitHub events. Sometimes this event is the opening, updating, or merging of a branch, or sometimes a manual invocation, or a GitHub release event.</p>

<h3 id="check-helm-charts">Check Helm Charts</h3>

<p>Every PR which includes changes to the files under <code class="language-plaintext highlighter-rouge">install/kubernetes/</code> directory in the <code class="language-plaintext highlighter-rouge">meshery/meshery</code> will trigger a Github Action to check for any mistakes in Helm charts using the <code class="language-plaintext highlighter-rouge">helm lint</code> command.</p>

<h3 id="release-helm-charts-to-github-and-artifact-hub">Release Helm Charts to Github and Artifact Hub</h3>

<p>New Meshery Helm charts are published upon trigger of a release event in the <code class="language-plaintext highlighter-rouge">meshery/meshery</code> repo. New versions of Meshery’s Helm charts are published to <a href="/v0.6/v0.6https://github.com/meshery/meshery.io/tree/master/charts">Meshery’s Helm charts release page</a>. [Artifact Hub] (https://artifacthub.io/packages/helm/meshery/meshery) syncs with these updated Meshery Helm charts.</p>

<h2 id="release-versioning">Release Versioning</h2>

<p>Meshery and its components follow the commonly used, semantic versioning for its release numbering scheme. Given a version number MAJOR.MINOR.PATCH.BUILD, increment the:</p>

<ul>
  <li>MAJOR version - major changes with rare potential for incompatible API changes.</li>
  <li>MINOR version - add functionality in a backwards-compatible manner.</li>
  <li>PATCH version - mostly for bug and security fixes.</li>
  <li>AlPHA/BETA/RC - used to facilitate early testing of an upcoming release.</li>
</ul>

<h3 id="component-versioning">Component Versioning</h3>

<p>Meshery comprises a number of components including a server, adapters, UI, and CLI. As an application, Meshery is a composition of these different functional components. While all of Meshery’s components generally deploy as a collective unit (together), each component is versioned independently, so as to allow them to be loosely coupled and iterate on functionality independently. Some of the components must be upgraded simultaneously, while others may be upgraded independently. See <a href="/v0.6/v0.6/guide/upgrade">Upgrading Meshery</a> for more information.</p>

<p>GitHub release tags will contain a semantic version number. Semantic version numbers will have to be managed manually by tagging a relevant commit in the master branch with a semantic version number (example: v1.2.3).</p>

<h2 id="release-process">Release Process</h2>

<p>Documentation of Meshery releases contains a table of releases and release notes and should be updated with each release.</p>

<h3 id="automated-releases">Automated Releases</h3>

<p>Releases are manually triggered by a member of the release team publishing a release. Release names and release tags need to be assigned by the publishing team member. GitHub Action workflows will trigger and take care of running the required steps and publishing all artifacts (e.g., binary and docker images).</p>

<h3 id="workflow-triggers">Workflow Triggers</h3>

<p>The following events will trigger one or more workflows:</p>

<ol>
  <li>Tagged Release</li>
  <li>Commit pushed to the master branch</li>
  <li>PR opened or commit pushed to PR branch</li>
  <li>PR merged to the master branch</li>
</ol>

<h3 id="release-notes">Release Notes</h3>

<p>While use of GitHub Actions facilitates automated builds, ReleaseDrafter is helping with facilitating automated release notes and versioning.</p>

<h3 id="generating-release-notes">Generating Release Notes</h3>

<p>ReleaseDrafter generates a GitHub tag and release draft. ReleaseDrafter action will trigger and will automatically draft release notes according to the configuration set-up. ReleaseDrafter drafts releases as soon as a commit is made into master after the previous release. The GitHub Action, ReleaseDrafter, is compatible with semantic releases and is used to auto-increment the semantic version number by looking at the previous release version.</p>

<h4 id="automated-release-notes-publishing">Automated Release Notes Publishing</h4>

<p>The publishing of release notes to Meshery Docs is automated. Triggered by a release event, a workflow will checkout the Meshery repo, copy the auto-drafted release notes into a Jekyll collection in Meshery Docs, and generate a pull request.</p>

<h4 id="automated-release-notes-sending">Automated Release Notes Sending</h4>

<p>The sending of release notes is now automated as a step in the stable release channel workflow. The release notes are automatically sent to the <a href="/v0.6/v0.6https://groups.google.com/a/meshery.io/g/developers">developers@meshery.io mailing list</a>.</p>

<h4 id="automated-pull-request-labeler">Automated Pull Request Labeler</h4>

<p>A GitHub Issue labeler bot is configured to automatically assign labels to issues based on which files have changed in which directories. For example, a pull request with changes to files in the “/docs/**” folder will receive the “area/docs” label. Presence of the “area/docs” label is used to trigger documentation builds and Netlify builds of the Meshery Docs. Similar labels are assigned and used to trigger workflows or used as conditional flags in workflows to determine which workflows or which steps in a workflows to run.</p>

<h2 id="release-channels">Release Channels</h2>

<p>Artifacts of the builds for Meshery and its components are published under two different release channels, so that improved controls may be provided to both Meshery users and Meshery developers. The two release channels are <em>edge</em> and <em>stable</em> release channels.</p>

<p>Relative to stable releases, edge releases occur much more frequently. Edge releases are made with each merge to master, unless that merge to master is for a stable release. Stable releases are made with each merge to master when a GitHub release tag is also present in the workflow.</p>

<h3 id="stable-channel">Stable Channel</h3>

<p>The following is an example of the release channels and the docker tags used to differentiate them. The latest tag will be applied only to images in the stable release channel. Here are two releases with two different images.</p>

<p><strong>Latest Stable Image</strong></p>

<ul>
  <li>layer5/meshery:stable-latest</li>
  <li>layer5/meshery:stable-v0.4.1</li>
  <li>layer5/meshery:stable-324vdgb (sha)</li>
</ul>

<p><strong>Older Stable Image</strong></p>

<ul>
  <li>layer5/meshery:stable-v0.4.0</li>
  <li>layer5/meshery:stable-289d02 (sha)</li>
</ul>

<p>Every docker image built receives either the edge tags or the stable tags. Which set of image tags assigned is determined by whether a release tag is present or not. In other words, stable channel docker images get the “stable” tags only in the presence of a release tag (e.g. v0.4.1).</p>

<h3 id="edge-channel">Edge Channel</h3>

<p>The Edge release channel provides early access to the latest features, allowing experimentation and feedback. Recent updates introduce dynamic versioning for Edge releases and improve compatibility with remote providers, ensuring a seamless experience. This makes the Edge channel valuable for users seeking cutting-edge features while contributing to the Meshery project. Docker image tags remain consistent for differentiation.</p>

<p>Stable and edge releases are both published to the same Docker Hub repository. Docker Hub repositories differentiate release channels by image tag. The following Docker images tagging convention is followed:</p>

<p><strong>Latest Edge Image</strong></p>

<ul>
  <li>layer5/meshery:edge-latest</li>
  <li>layer5/meshery:edge-289d02 (sha)</li>
</ul>

<p><strong>Older Edge Image</strong></p>

<ul>
  <li>layer5/meshery:edge-324vdgb (sha)</li>
</ul>

<h3 id="switching-between-meshery-release-channels">Switching Between Meshery Release Channels</h3>

<p>Users are empowered to switch between release channels at their leisure.</p>

<h4 id="switching-release-channels-using-mesheryctl">Switching Release Channels Using mesheryctl</h4>

<p>Users can use mesheryctl to switch between release channels, e.g. <code class="language-plaintext highlighter-rouge">mesheryctl system channel [stable|edge]</code>. Alternatively, users can manually switch between channels by updating the docker image tags in their meshery.yaml / Kubernetes manifest files. This command generates a meshery.yml (a docker-compose file) with release channel-appropriate tags for the different Docker container images.</p>

<h4 id="viewing-release-channel-and-version-information-in-meshery-ui">Viewing Release Channel and Version Information in Meshery UI</h4>

<p>Users are shown their Meshery deployment’s release channel subscription enient new setting in the Preferences area of the Meshery UI, so that people can alternatively use the UI to switch between channels if they like. Version numbers for Meshery adapters are also shown in the UI.</p>

<h2 id="release-cadence">Release Cadence</h2>

<p>Minor releases of the Meshery project are release frequently (on a monthly basis on average) with patch releases made on-demand in-between those times. The project does not have long term releases that are sustained with bug fixes, yet. Bug fixes and patches will be released as needed on the latest release version.</p>

<h3 id="release-support">Release Support</h3>

<p>General community support and commercial support from Meshery is available. Separately, third parties and partners may offer longer-term support solutions.</p>

<h4 id="pre-v10">Pre v1.0</h4>

<p>Project focuses on functionality, quality and adoption, while retaining the flexibility for shifts in architecture.</p>

<h4 id="post-v10">Post v1.0</h4>

<p>Once a 1.0 release has been made, Around once a month or so, the project maintainers will take one of these daily builds and run it through a number of additional qualification tests and tag the build as a Stable release. Around once a quarter or so, the project maintainers take one of these Stable releases, run through a bunch more tests and tag the build as a Long Term Support (LTS) release. Finally, if we find something wrong with an LTS release, we issue patches.</p>

<p>The different types (Daily, Stable, LTS) represent different product quality levels and different levels of support from the Meshery team. In this context, support means that we will produce patch releases for critical issues and offer technical assistance.</p>

<h2 id="versioning-documentation">Versioning Documentation</h2>

<h3 id="for-new-major-release">For new major release</h3>

<p>The structure which the docs follow right now is, The main <code class="language-plaintext highlighter-rouge">docs</code> folder has the most recent version of documentation, while there are sub-folders for previous versions, v0.x (x being the last major release).
On release of a new major version, the static html files for the most recent version is generated and is renamed as the release version (v0.x).</p>

<h5 id="steps">Steps:</h5>

<p>After cloning the Meshery repository</p>

<ol>
  <li><code class="language-plaintext highlighter-rouge">cd docs</code> &gt; <code class="language-plaintext highlighter-rouge">bundle install</code> &gt; <code class="language-plaintext highlighter-rouge">make docs</code></li>
  <li>On executing <code class="language-plaintext highlighter-rouge">make docs</code> a <code class="language-plaintext highlighter-rouge">_site</code> folder is created which has static html files.</li>
  <li>The <code class="language-plaintext highlighter-rouge">_site</code> folder is renamed to <code class="language-plaintext highlighter-rouge">v0.x</code>.</li>
  <li>This <code class="language-plaintext highlighter-rouge">v0.x</code> folder is now the latest version of docs.</li>
</ol>

<h5 id="in-the-v0x-folder"><em>In the <code class="language-plaintext highlighter-rouge">v0.x</code> folder</em></h5>

<ol>
  <li>Search and replace all the instances where there is a direct path is defined to include the version name in the path, i.e, all paths to intra-page links and images should start with <code class="language-plaintext highlighter-rouge">/v0.x/</code>.</li>
</ol>

<ul>
  <li>Look for <code class="language-plaintext highlighter-rouge">href="/v0.6/v0.6/</code> and replace with <code class="language-plaintext highlighter-rouge">href="/v0.6/v0.6/0.x/</code></li>
  <li>Look for <code class="language-plaintext highlighter-rouge">src="/</code>and replace with <code class="language-plaintext highlighter-rouge">src="/0.x/</code> <br /><br />
<a href="/v0.6/assets/img/versioning-guide/search-and-replace.png">
<img src="/assets/img/versioning-guide/search-and-replace.png" />
</a></li>
</ul>

<h3 id="for-old-release">For old release</h3>

<p>For older releases we have to travel back in time. Using the <code class="language-plaintext highlighter-rouge">Tags</code> in github we go to a previous release, <code class="language-plaintext highlighter-rouge">v0.X.x</code>, the <code class="language-plaintext highlighter-rouge">.x</code> here should be the latest version of the archived docs.</p>

<h5 id="steps-1">Steps:</h5>

<ol>
  <li>
    <p>Copy the commit ID for that release. <br /><br />
<a href="/v0.6/assets/img/versioning-guide/commit-ID.png">
<img src="/assets/img/versioning-guide/commit-ID.png" />
</a></p>
  </li>
  <li><code class="language-plaintext highlighter-rouge">git checkout &lt;commit ID&gt;</code> &gt; <code class="language-plaintext highlighter-rouge">cd docs</code> &gt; <code class="language-plaintext highlighter-rouge">bundle install</code> &gt; <code class="language-plaintext highlighter-rouge">make docs</code></li>
  <li>On executing <code class="language-plaintext highlighter-rouge">make docs</code> a <code class="language-plaintext highlighter-rouge">_site</code> folder is created which has static html files.</li>
  <li>The <code class="language-plaintext highlighter-rouge">_site</code> folder is renamed to <code class="language-plaintext highlighter-rouge">v0.X</code> and is copied into the <code class="language-plaintext highlighter-rouge">docs</code> folder of the present version.</li>
</ol>

<h2 id="bi-weekly-meetings">Bi-Weekly Meetings</h2>

<p>If you are passionate about CI/CD pipelines, DevOps, automated testing, managing deployments, or if you want to learn how to use Meshery and its features, you are invited to join the bi-weekly Build and Release meetings. Find meeting details and agenda in the <a href="/v0.6/v0.6https://meshery.io/calendar">community calendar</a> and the <a href="/v0.6/v0.6https://docs.google.com/document/d/1GrVdGHZAYeu6wHNLLoiaKNqBtk7enXE9XeDRCvdA4bY/edit#">meeting minutes document</a>. The meetings are open to everyone and recorded for later viewing. We hope to see you there!</p>

<p>These <a href="/v0.6/v0.6/project/build-and-release#in-the-v0x-folder">steps</a> for replacing all the instances of direct path are to be followed.</p>



<script>
  /*clipboard.js code*/
</script>

<!-- <script
  src="https://code.jquery.com/jquery-3.3.1.min.js"
  integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
  crossorigin="anonymous"></script>

<script>
$(document).ready(function() {

    var toc = $('#TOC');

    // Select each header
    sections = $('.td-content h1');
        $.each(sections, function(idx, v) {
            section = $(v);
            var div_id = $(section).attr('id');
            if(!section.hasClass('noTOC')){
               var div_text = section.text().split('¶')[0];
              var parent = $("#" + div_id)
              var content = '<li id="link_' + div_id + '" class="md-nav__item"><a class="md-nav__link" href="/v0.6/v0.6#' + div_id + '" title="' + div_text +'">' + div_text +'</a></li>';
              $(toc).append(content);
            }

            // Add section code to subnavigation
            var children = $('<nav class="md-nav"><ul class="md-nav__list"></nav></ul>')
            var contenders = $("#" + div_id).nextUntil("h1");
            $.each(contenders, function(idx, contender){
               if( !$(contender).hasClass("noTOC") && ($(contender).is('h2') || $(contender).is('h3')) ) {
                   var contender_id = $(contender).attr('id');
                   var contender_text = $(contender).text().split('¶')[0];
                   var content = '<li class="md-nav__item"><a class="md-nav__link" href="/v0.6/v0.6#' + contender_id + '" title="' + contender_text +'">' + contender_text +'</a></li>';
                   children.append(content);
                }
             })
             $("#link_" + div_id).append(children);
        });
        //added 'selected' tag to the first element of toc
        $('.md-nav__link').first().addClass('selected');

        $(window).scroll(function(e){
          // Detect how far are we from the top of the page
          let windowTop = $(this).scrollTop();
          // Loop through every navigation menu item
          $('.md-nav__link').each(function (event) {       
              if (windowTop >= $($(this).attr('href')).offset().top - 100) {
              // Remove 'selected' from previously highlighted menu items
              $('.selected').removeClass('selected');
              // Highlight the current menu item by adding 'selected' class
              $(this).addClass('selected');
          }
          if($(window).scrollTop() + $(window).height() > $(document).height() - 10) {
            $('.selected').removeClass('selected');
              $(this).addClass('selected');
          }
        });
      })
      // Smooth scroll to target section when clicking on TOC link
      $('a[href^="#"]').on('click', function(event) {
        event.preventDefault();
        var target = $(this.hash);
        if (target.length) {
          $('html, body').animate({
          scrollTop: target.offset().top - 70
          }, 1000);
        }
      });
    });
</script> -->  <br/>


        </div>
      </main>
      
      <div class="content-table-wrapper">
        <div class="content-table">
          <div class="content-table__editable"><strong>Tools</strong>
<a href="/v0.6/v0.6https://github.com/meshery/meshery/issues/new?assignees=&labels=area%2Fdocs%2C+framework%2Fjekyll&template=documentation.md&title=%5BDocs%5D" rel="noopener" target="_blank"><i class="fab fa-github fa-fw"></i> Create doc issue</a>
<a href="/v0.6/v0.6https://github.com/meshery/meshery/blob/master/docs/pages/project/contributing/ci-build-and-release.md" rel="noopener" target="_blank"><i class="fa fa-edit fa-fw"></i> Edit this page</a>
<a href="/v0.6/v0.6https://github.com/meshery/meshery/new/master/docs/pages/project/contributing/ci-build-and-release.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+top+of+the+page+%28weight+controls+how+its+ordered+amongst+other+pages+in+the+same+directory%3B+lowest+number+first%29.%0A%2A+Add+a+good+commit+message+at+the+bottom+of+the+page+%28%3C80+characters%3B+use+the+extended+description+field+for+more+detail%29.%0A%2A+Create+a+new+branch+so+you+can+preview+your+new+file+and+request+a+review+via+Pull+Request.%0A" rel="noopener" target="_blank"><i class="fa fa-plus fa-fw"></i> Create new page</a>


<!-- this will parse through the header fields and add a button to open
     an issue / ask a question on Github. The editable field should be in
     the post frontend matter, and refer to the label to open the issue for -->
     
</div>
          <nav id="TableOfContents">
            <strong>Contents</strong>
            <ul>
              <li>
                <ul id="TOC">
                  <!-- Links will be appended here-->
                </ul>
              </li>
            </ul>
          </nav>
        </div>
      </div>
      
    </div>
    <footer class="footer">
  <!-- meshery-custom-begin"
      <div class="col-6 col-sm-4 text-xs-center order-sm-2">

<ul class="list-inline mb-0">
  <li class="list-inline-item mx-2 h3" data-toggle="tooltip" data-placement="top" title="" aria-label="Twitter" data-original-title="Twitter">
    <a class="text-white" target="_blank" href="/v0.6/v0.6https://twitter.com/https://twitter.com/mesheryio">
      <i class="fab fa-twitter"></i>
    </a>
  </li>
</ul>
</div>
<div class="col-6 col-sm-4 text-right text-xs-center order-sm-3">
<ul class="list-inline mb-0">
  <li class="list-inline-item mx-2 h3" data-toggle="tooltip" data-placement="top" title="" aria-label="GitHub" data-original-title="GitHub">
    <a class="text-white" target="_blank" href="/v0.6/v0.6https://github.com/meshery/meshery">
      <i class="fab fa-github"></i>
    </a>
  </li>
</ul>
meshery-custom-end -->
  <div class="text-white">&copy; 2023 The Meshery Authors</div>
  

  <!-- meshery-custom-begin -->

  <div class="footer-icons-list">
    <div class="footer-icons">
      <a class="social__link social__link--forum" href="/v0.6/v0.6http://discuss.meshery.io" target="_blank" rel="noreferrer">
        <img
          src=""
          alt="forum"
        />
        <span class="footer-icons-text small-hide">Community discussion forum</span>
      </a>
    </div>

    <div class="footer-icons">
      <a class="social__link social__link--mail" href="/v0.6/v0.6https://meshery.io/subscribe" target="_blank" rel="noreferrer">
        <img
          src=""
          alt="mail"
        />
        <span class="footer-icons-text small-hide">Get connected with the Meshery community</span>
      </a>
    </div>

    <div class="footer-icons">
      <a class="social__link social__link--slack" href="/v0.6/v0.6 https://slack.meshery.io/" target="_blank" rel="noreferrer">
        <img
          class="slack"
          src=""
          alt="slack"
        />
        <span class="footer-icons-text small-hide">Join the Meeshery Slack</span>
      </a>
    </div>

    <div class="footer-icons">
      <a class="social__link" href="/v0.6/v0.6https://meshery.io/calendar">
        <svg fill="white" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
          <path
            d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"
          />
          <g stroke-linecap="undefined" stroke-linejoin="undefined">
            <path d="M-3.468 8.168h-.033m25.313-4.242l-.063-.254M7.858 4.814v9.387" />
            <path d="M1.833 9.507h12.051" />
          </g>
        </svg>
        <span class="footer-icons-text small-hide">Subscribe to the community calender</span>
      </a>
    </div>

    <div class="footer-icons">
      <a class="social__link" href="/v0.6/v0.6https://twitter.com/mesheryio" target="_blank" rel="noreferrer">
       <svg fill="#999" alt="twitter" class="twitter" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" version="1.1" height="1.8em"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" fill="#0d0d0d"></path></svg>
       <span class="footer-icons-text small-hide">Follow on Twitter</span>
      </a>
    </div>

    <div class="footer-icons">
      <a class="social__link" href="/v0.6/v0.6https://github.com/meshery" target="_blank" rel="noreferrer">
        <img
          class="github"
          src=""
          alt="github"
        />
        <span class="footer-icons-text small-hide">Contribute on GitHub</span>
      </a>
    </div>

    <div class="footer-icons">
      <a class="social__link" href="/v0.6/v0.6https://www.linkedin.com/company/layer5" target="_blank" rel="noreferrer">
        <img
          class="linkedin"
          src=""
          alt="linkedin"
        />
        <span class="footer-icons-text small-hide">Connect on LinkedIn</span>
      </a>
    </div>

    <div class="footer-icons">
      <a
        class="social__link"
        href="/v0.6/v0.6https://www.youtube.com/mesheryio?sub_confirmation=1"
        target="_blank"
        rel="noreferrer"
      >
        <img
          class="youtube"
          src=""
          alt="youtube"
        />
        <span class="footer-icons-text small-hide">Watch community meeting recordings</span>
      </a>
    </div>

    <div class="footer-icons">
      <a class="social__link" href="/v0.6/v0.6https://hub.docker.com/u/meshery/" target="_blank" rel="noreferrer">
        <img
          class="docker"
          src=""
          alt="docker"
        />
        <span class="footer-icons-text small-hide">Access Docker images</span>
      </a>
    </div>
  </div>
  <!-- meshery-custom-end -->
</footer>

<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/clipboard@1/dist/clipboard.min.js"></script>

<script type="text/javascript" src="/assets/js/lightbox.js"></script>
<link rel="stylesheet" href="/v0.6/assets/css/lightbox.css" />
<script type="module" src="https://md-block.verou.me/md-block.js"></script>

 <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<script src="/assets/js/main.js"></script>
<script src="/assets/js/navbar.js"></script>

 <script async src='https://www.google-analytics.com/analytics.js'></script>
<script type="application/javascript">
var doNotTrack = false;
if (!doNotTrack) {
	window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
	ga('create', 'UA-00000000-0', 'auto');
	ga('send', 'pageview');
}
</script>

  </body>
</html>
<script
  src="https://code.jquery.com/jquery-3.3.1.min.js"
  integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
  crossorigin="anonymous"></script>

<script>
$(document).ready(function() {

    var toc = $('#TOC');

    // Select each header
    sections = $('.td-content h1');
        $.each(sections, function(idx, v) {
            section = $(v);
            var div_id = $(section).attr('id');
            if(!section.hasClass('noTOC')){
               var div_text = section.text().split('¶')[0];
              var parent = $("#" + div_id)
              var content = '<li id="link_' + div_id + '" class="md-nav__item"><a class="md-nav__link" href="/v0.6/v0.6#' + div_id + '" title="' + div_text +'">' + div_text +'</a></li>';
              $(toc).append(content);
            }

            // Add section code to subnavigation
            var children = $('<nav class="md-nav"><ul class="md-nav__list"></nav></ul>')
            var contenders = $("#" + div_id).nextUntil("h1");
            $.each(contenders, function(idx, contender){
               if( !$(contender).hasClass("noTOC") && ($(contender).is('h2') || $(contender).is('h3')) ) {
                   var contender_id = $(contender).attr('id');
                   var contender_text = $(contender).text().split('¶')[0];
                   var content = '<li class="md-nav__item"><a class="md-nav__link" href="/v0.6/v0.6#' + contender_id + '" title="' + contender_text +'">' + contender_text +'</a></li>';
                   children.append(content);
                }
             })
             $("#link_" + div_id).append(children);
        });
        //added 'selected' tag to the first element of toc
        $('.md-nav__link').first().addClass('selected');

        $(window).scroll(function(e){
          // Detect how far are we from the top of the page
          let windowTop = $(this).scrollTop();
          // Loop through every navigation menu item
          $('.md-nav__link').each(function (event) {       
              if (windowTop >= $($(this).attr('href')).offset().top - 100) {
              // Remove 'selected' from previously highlighted menu items
              $('.selected').removeClass('selected');
              // Highlight the current menu item by adding 'selected' class
              $(this).addClass('selected');
          }
          if($(window).scrollTop() + $(window).height() > $(document).height() - 10) {
            $('.selected').removeClass('selected');
              $(this).addClass('selected');
          }
        });
      })
      // Smooth scroll to target section when clicking on TOC link
      $('a[href^="#"]').on('click', function(event) {
        event.preventDefault();
        var target = $(this.hash);
        if (target.length) {
          $('html, body').animate({
          scrollTop: target.offset().top - 70
          }, 1000);
        }
      });
    });
</script>

